
import { createRouter, createWebHistory } from 'vue-router';

// 导入其它路由记录
import homeRoutes from './home';
import studentRoutes from './student';
import pandaRoutes from './panda';

// 设置 RouterOptions
const options = {
    history: createWebHistory(),
    routes: [ ...homeRoutes , ...studentRoutes , ... pandaRoutes ]
}

// 创建 Router实例
const router = createRouter( options );

// 在数组中定义默认可以访问的路由路径
const allows = [ '/' , '/home' , '/about' , '/sign/in' , '/sign/up' , '/panda/*' ];

// 注册一个全局前置守卫
router.beforeEach( (to,from) => {
  console.log( '- - - 全局前置守卫 - - -' );
  console.log( 'from: ' , from.path , ' , to: ' , to.path ); 
  let path = to.path;
  // 判断被访问路径是否是 allows 中允许被直接访问的
  let allow = allows.some(function(e){
    if( e == path ) { // 被访问的路径与数组中某个路径相等
      return true ;
    }
    // 若数组中某个路径以 `*` 为结尾
    if( e.endsWith( "*" ) ){
      // 则截取 `*` 之前的内容视为某些路径的前缀
      let prefix = e.substring( 0 , e.length - 1 );
      // 若被访问的路径以 prefix 为前缀
      if( path.startsWith( prefix ) ) {
        return true ;
      }
    }
  });
  let loggedIn = sessionStorage.getItem('LOGGED_IN_STUDENT');
  // 若 path 属于可以直接访问的路径或学生已经登录
  if( allow || loggedIn ) {
    // 当返回 true 或 undefined 时就表示继续导航
    return true; 
  }

  // 返回新的 路由地址 ( RouteLocationRaw ) 并传递参数
  return { name: 'SignIn', params: { message: '请先登录' } };
} );

// 注册一个全局解析守卫
router.beforeResolve( (to,from) => {
  console.log( '- - - 全局解析守卫 - - -' );
  console.log( 'from: ' , from.path , ' , to: ' , to.path ); 
});


// 注册一个全局后置钩子
router.afterEach( (to,from) => {
  console.log( '- - - 全局后置钩子 - - -' );
  console.log( 'from: ' , from.path , ' , to: ' , to.path );
  // 使用路由元信息中的title作为页面标题
  document.title = to.meta.title ;
} );


// 导出 Router实例
export default router ;